import { getToken, setToken, removeToken } from '@/utils/auth'
import { login, getUserProfile, getUserDetailByid } from '@/api/user'

import { resetRouter } from '@/router'
const state = {
  token: getToken() || '', // 用户token
  userInfo: {}// 用户信息
}

const mutations = {
  // 设置用户token
  setTokenMutation(state, newToken) {
    // 存到vuex里面
    state.token = newToken
    // 存到cookie里面
    setToken(newToken)
  },
  // 移除用户token
  removeTokenMutation(state) {
    state.token = ''
    removeToken()
  },
  // 获得用户信息
  getuserInfoMutation(state, userInfo) {
    state.userInfo = userInfo
  },
  // 清空用户信息
  clearuserInfoMutation(state) {
    state.userInfo = {}
  }
}

const actions = {
  // 用户登录功能
  async userLogin(context, params) {
    const res = await login(params)
    context.commit('setTokenMutation', res.data)
  },
  // 获取用户基本信息将两个接口的结果进行拼接
  async getuserInfoAction(context) {
    // 发送两次获取用户信息请求
    const res = await getUserProfile()
    const res2 = await getUserDetailByid(res.data.userId)
    context.commit('getuserInfoMutation', { ...res.data, ...res2.data })
    return res.data.roles.menus
  },
  // 用户退出功能
  logout(context) {
    // 清除用户token及用户基本信息
    context.commit('removeTokenMutation')
    context.commit('clearuserInfoMutation')
    resetRouter()
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

